package stage;

import com.vividsolutions.jts.geom.Geometry;

/**
 * Classe che implementa l'oggetto che rappresenta il risultato di una join
 * tra due elementi. Contiene l'id del primo oggetto con cui è stata fatta la join
 * l'id dell'elemento con cui interseca, la geometry del primo oggetto
 *
 * @author Matteo Cuccato
 * @author Nicola Girardi
 */
public class GeometryIntersection {

    private int id, intersection_id;
    private Geometry g, mbr;

    /**
     * Metodo costruttore vuoto
     *
     */
    public GeometryIntersection(){
        id=0;
        g=null;
        mbr = null;
    }//end costruttore


    /**
     * Metodo costruttore
     *
     * @param int Id
     * @param Geometry Geometria associata all'id
     * @exception NullPointerException Se la Geometry è null
     */
    public GeometryIntersection(int id, int inter_id, Geometry g) throws NullPointerException{
        if ( g == null )
            throw new NullPointerException("Geometry g is null");
        this.id=id;
        intersection_id = inter_id;
        this.g=g;
        mbr = g.getEnvelope();
    }//end costruttore

    /**
     * Metodo costrutture
     *
     * @param int Id
     * @param Geometry Geometria associata all'id
     * @param Geometry Envelope della geometry
     * @exception NullPointerException Se una delle due Geometry è null
     */
    public GeometryIntersection(int id, int inter_id, Geometry g, Geometry m) throws NullPointerException{
        if ( g == null )
            throw new NullPointerException("Geometry g is null");

        if ( m == null )
            throw new NullPointerException("Geometry mbr is null");

        this.id=id;
        intersection_id = inter_id;
        this.g=g;
        mbr = m;
    }//end costruttore



    /**
     * Metodo che ritorna Id
     *
     * @return int Id
     */
    public int getId(){
        return id;
    }//end getId

    /**
     * Metodo che ritorna l'intersection_id
     *
     * @return int Intersection_id
     */
    public int getIntersection_id() {
        return intersection_id;
    }


    /**
     * Metodo che ritorna la Geometry
     *
     * @return Geometry g
     */
    public Geometry getGeometry(){
        return g;
    }//end getGeometry


    /**
     * Metodo che ritorna l'envelope della geometry
     *
     * @return Geometry Envelope delle geometry
     */
    public Geometry getMbr() {
        return mbr;
    }


    /**
     * Metodo per impostare o cambiare l'Id
     *
     * @param int Id
     */
    public void setId(int id){
        this.id=id;
    }//end setId


    /**
     * Metodo per impostare o cambiare l'intersection_id
     *
     * @param int Intersection_id
     */
    public void setIntersection_id(int intersection_id) {
        this.intersection_id = intersection_id;
    }


    /**
     * Metodo per impostare o cambiare la Geometry
     *
     * @param Geometry Nuova geometry
     * @exception NullPointerException Se la Geometry è null
     */
    public void setGeometry(Geometry g) throws NullPointerException{
        if ( g == null )
            throw new NullPointerException("Geometry g is null");

        this.g=g;
        mbr = g.getEnvelope();
    }//end setGeometry


    /**
     * Metodo che permette di impostare o cambiare l'mbr
     *
     * @param Geometry Envelope della geometry
     * @exception NullPointerException Se la Geometry è null
     */
    public void setMbr(Geometry mbr) throws NullPointerException{
        if ( g == null )
            throw new NullPointerException("Geometry mbr is null");
        this.mbr = mbr;
    }

}
